//=======================================Copyright(c)===========================================
// 								  深圳易马达科技有限公司
//---------------------------------------文件信息----------------------------------------------
//文件名   	: BSPTask.h
//创建人  	: Handry
//创建日期	:
//描述	    : 任务调度模块头文件
//-----------------------------------------------当前版本修订----------------------------------
//修改人   	:
//版本	    :
//修改日期	:
//描述	    :
//=============================================================================================
#ifndef _BSPTASK_H
#define _BSPTASK_H

//=============================================================================================
//包含头文件
//=============================================================================================
#include "BSPTypeDef.h"

//=============================================================================================
//宏参数设定
//=============================================================================================
#define		TASK_MAX_TIME			 0xFFFFFFFF				//时间轴最大计数值

#define 	TASK_BEFORE_RESET_TIME   3600000                            	   //系统提前预置时间为1小时,1ms为单位
#define 	TASK_MAX_USEABLE_TIME    (TASK_MAX_TIME - TASK_BEFORE_RESET_TIME)  //系统实际可用的时间范围


//=============================================================================================
//定义数据类型
//=============================================================================================
typedef struct
{
	u8   TaskEn;      		    //任务使能标志
	u8   TaskRdy;     		    //任务就绪标志
	u32  TaskCnt;               //任务时间轴计数器
	void (*TaskFunc)(void *);   //任务执行函数
	void *TaskFuncArg;          //任务执行函数的参数
} t_Task;

//=============================================================================================
//声明接口函数
//=============================================================================================
//=============================================================================================
//函数名称	: void BSPTaskInit(void)
//输入参数	: void  
//输出参数	: void
//函数功能	: 任务调度初始化
//注意事项	:
//=============================================================================================
void BSPTaskInit(void);

//=============================================================================================
//函数名称	: void BSPTaskCreate(u8 id, void (*fnct)(void *), void *arg)
//输入参数	: id:任务ID *fnct:执行函数 arg:参数  
//输出参数	: void
//函数功能	: 配置任务相应的函数及参数 
//注意事项	:  
//=============================================================================================
void BSPTaskCreate(u8 id, void (*fnct)(void *), void *arg);

//=============================================================================================
//函数名称	: void BSPTaskCreate(u8 id)
//输入参数	: id:任务ID
//输出参数	: void
//函数功能	: 删除指定的任务
//注意事项	:
//=============================================================================================
void BSPTaskDelete(u8 id);

//=============================================================================================
//函数名称	: void BSPTaskDelay(u8 id, u32 delay)
//输入参数	: id:任务号 delay:延迟时间
//输出参数	: void
//函数功能	: 设置任务延迟时间 
//注意事项	:  
//=============================================================================================
void BSPTaskDelay(u8 id, u32 delay);

//=============================================================================================
//函数名称	: u8 BSPTaskStart(u8 id, u32 delay)
//输入参数	: id:任务ID delay:下次执行延迟时间
//输出参数	: u8 返回1，配置pt一起使用
//函数功能	: 设定任务在延迟delay时间后启动,设置为0，则任务立刻就绪
//注意事项	:  
//=============================================================================================
u8 BSPTaskStart(u8 id, u32 delay);

//=============================================================================================
//函数名称	: void BSPTaskStop(u8 id)
//输入参数	: id:任务ID
//输出参数	: void
//函数功能	: 停止指定任务
//注意事项	:  
//=============================================================================================
void BSPTaskStop(u8 id);

//=============================================================================================
//函数名称	: void BSPTaskTickHandler(void)
//输入参数	: void  
//输出参数	: void
//函数功能	: 中断执行函数,时间轴总计数器计数，设置任务标志
//注意事项	: 1ms定时中断调用 
//=============================================================================================
void BSPTaskTickHandler(void);

//=============================================================================================
//函数名称	: void BSPTaskProcess (void)
//输入参数	: *p:参数格式需要
//输出参数	: void
//函数功能	: 负责检测各任务是否启动,并执行相应任务函数 
//注意事项	: main函数调用 
//=============================================================================================
void BSPTaskProcess(void);

//=============================================================================================
//函数名称	: u32 BSPTaskGetSysTimer(void)
//输入参数	: void
//输出参数	: 上电时间(1s)
//函数功能	: 获取任电时间
//注意事项	:
//=============================================================================================
u32 BSPTaskGetSysTimer(void);

//=============================================================================================
//函数名称	: void BSPTaskClrSysTimer(void)
//输入参数	: void
//输出参数	: 清除上电时间(1s)
//函数功能	: 清除上电时间
//注意事项	:
//=============================================================================================
void BSPTaskClrSysTimer(void);

//=============================================================================================
//函数名称	: u32 BSPTaskGetTaskNum(void)
//输入参数	: void  
//输出参数	: void
//函数功能	: 获取规定时间内COS执行次数
//注意事项	:  
//=============================================================================================
u32 BSPTaskGetTaskNum(void);


//=============================================================================================
//函数名称	: u8 BSPTaskGetIsTaskStop(u8 id)
//输入参数	: void  
//输出参数	: 0:任务停止；1：任务运行
//函数功能	: 获取任务是否被停止
//注意事项	:  
//=============================================================================================
u8 BSPTaskGetIsTaskStop(u8 id);

#endif

/*****************************************end of BSPTask.h*****************************************/
